// // // // {
// // // //   let a = 1
// // // // }
// // // // console.log('a==>', a) /// a is not defined

// // // // console.log('b===>', b) 
// // // // var b = 2  // undefined
// // // // let b = 2  // Cannot access 'b' before initialization === a is not defined
// // // // console.log('a', a)// undefined
// // // // var a = 1
// // // // console.log('c', c)// 报错
// // // // let c = 1 
// // const a = {}
// // // // const b = [1, [2,3],4]   [[1,2,3],4]
// // // // const c =  [['1','2','3'],4]
// // // // const b = function tq(){console.log(1)}
// // // // const c = function tq(){console.log(0)}
// // const b = {key: 'a'}
// // const c ={key: 'b'}

// // a[b] = 123
// // a[c] = 456
// // const d = {
// //   [b]: '1', 
// //   [c]: '2'
// // }
// // console.log(a) // 属性名表达式如果是一个对象，默认情况下会自动将对象转为字符串[object Object] 
// // console.log(d) // 因为[b]和[c] 都是得到[object Object] ，所以[c]会覆盖[b]  ，最后输出{ '[object Object]': '2' }


// // function add(num) {
// //   var fun = function (n) {
// //     return add(num + n)
// //   }
// //   // fun.valueOf = function () {
// //   //   return num
// //   // }
// //   // fun.toString = function () {
// //   //   return  '' + num
// //   // }
// //   return fun
// // }

// // var c = add(1)(2)(3)()
// // console.log(c)


// // // var a = {}.reduce((arr, item) => {
// // //   arr.push({
// // //     url: item.test
// // //   })
// // //   return arr
// // // }, [])
// // // console.log(a)

// // function add(num) {
// //   let count = num
// //   function fn(n) {
// //     return num + n
// //   }
// //   return fn
// // }
// // console.log('adddd-->', add(1)(2)(3))

// var add = function (m) {
 
//   var temp = function (n) {
//       return add(m + n);
//   }

//   temp.toString = function () {
//       return m;
//   }

//   return temp;
// };



let pp = () => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      reject('error')
    }, 100);
  })
}

function test(primiseFn, times) {
  if (!times) return
  primiseFn().then(() => {
    console.log('success')
  }).catch((err) => {
    console.log(err, times)
    times--
    test(primiseFn, times)
  })
}


test(pp, 3)